// 节流
export const throttle = (
    fn: { apply: (arg0: any, arg1: any[]) => void },
    delay = 400
) => {
    let timer: null | NodeJS.Timeout = null
    console.log('use throttle')

    return function (...args: any[]) {
        console.log('use throttle cb', timer)

        if (!timer) {
            timer = setTimeout(() => {
                fn.apply(this, args)
                timer = null
            }, delay)
        }
    }
}

// 防抖
export const debounce = (
    fn: { apply: (arg0: any, arg1: any[]) => void },
    delay = 400
) => {
    let timer: NodeJS.Timeout | null = null
    return function (...args: any[]) {
        if (timer) {
            clearTimeout(timer)
        }
        timer = setTimeout(() => {
            fn.apply(this, args)
        }, delay)
    }
}

/* export const range = (start: number, end: number) => {
    return Math.floor(start + Math.random() * (end - start))
} */
/**
 * 生成一个介于 start 和 end 之间的随机整数（不包括 end）。
 * @param start 随机数范围的起始值（包含）。
 * @param end 随机数范围的结束值（不包含）。
 * @throws {Error} 如果 start 大于 end 或者参数不是数字。
 */
export const range = (start: number, end: number): number => {
  // 参数校验
  if (typeof start !== 'number' || typeof end !== 'number') {
      throw new Error('参数必须是数字');
  }
  
  if (start > end) {
      throw new Error('起始值不能大于结束值');
  }

  // 生成随机数
  return Math.floor(start + Math.random() * (end - start));
};